package com.tjn.generic;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

/**
 * @author 陶镓妮
 * @version 1.0
 */
public class GenericDetail {
    @SuppressWarnings("all")
    public static void main(String[] args) {
        //1.泛型定义的数据类型只能是引用类型，不能是基本数据类型
        ArrayList<Integer> integers = new ArrayList<>();
        //ArrayList<int> integers = new ArrayList<int>();

        //2.给泛型指定具体类型之后，可以传入该类型或者该类型的子类类型的数据
        Pig<A> aPig = new Pig<A>(new A());
        aPig.show();//运行类型为A
        Pig<A> bPig = new Pig<A>(new B());
        bPig.show();//运行类型为B

        //3.泛型在写的时候可以简写，等号后面的<>中可以忽略不写
        HashMap<String, Integer> hashmap = new HashMap<>();

        //4.如果创建对象时，这个类本来是有泛型的，如果创建对象时没有指定泛型，那么默认为Object类型
        HashSet hashSet = new HashSet();
        //相当于HashSet<Object> hashSet = new HashSet<Object>();

    }
}
class A{}
class B extends A{}
class Pig<E>{
    E e;

    public Pig(E e) {
        this.e = e;
    }

    public void show(){
        System.out.println(e.getClass());
    }
}